/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo.DAL;

import Modelo.PuestoVigilancia;
import Modelo.Espacio;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import org.json.JSONObject;
import java.util.List;
import java.util.ArrayList;
import org.json.JSONArray;

/**
 *
 * @author andres
 */
public class PuestoVigilancia_DAO {



public static boolean insertarPuestoVigilancia(PuestoVigilancia puestoVigilancia, Espacio espacio) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Insertando Puesto de Vigilancia!");
            return false;
        }
        String query = "INSERT INTO puesto_vigilancia(puesto, id_area, nombre_sede,estado_puesto)"
                + "VALUES ('"
                + puestoVigilancia.getPuesto()
                + "','" + puestoVigilancia.getArea()
                + "','" + puestoVigilancia.getNombreSede() + "','on');"
                + "INSERT INTO espacio(nombre_espacio, id_area, nombre_sede, tipo, descripcion,coordx,coordy)"
                + "VALUES ('"+espacio.getNombreEspacio()+"','"
                + espacio.getArea()
                + "','" + espacio.getNombreSede()
                + "','" + espacio.getTipo()
                + "','" + espacio.getDescripcion()
                + "','" + espacio.getCoordx()
                + "','" + espacio.getCoordy() + "')";
        System.out.println("\n\tQuery: " + query + "\n");
        System.out.println(query);
        try {
            s.executeUpdate(query);
            
             conexion.cerrarConexion();
            return true;
        } catch (SQLException se) {
            System.out.println("Error Insertando Puesto de Vigilancia!");
             conexion.cerrarConexion();
            return false;
        }
    }

    public static List<PuestoVigilancia> consultarPuestoVigilancia() {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Sede!");
            return null;
        }
        String query = "SELECT id_puesto_vigilancia,puesto,id_area,nombre_sede FROM puesto_vigilancia ORDER BY puesto";
        System.out.println("\n\tQuery: " + query + "\n");
        System.out.println(query);
        List<PuestoVigilancia> listaPV = new ArrayList<PuestoVigilancia>();
        try {
            rs = s.executeQuery(query);


            /*
            Se recorre cada fila del ResultSet para instancia a cada empleado y agregarlo a la lista de empleados.
             */
            while (rs.next()) {
                /* Se instancia del nuevo Empleado. */
                PuestoVigilancia tempPV = new PuestoVigilancia(rs.getString("id_puesto_vigilancia"), rs.getString("puesto"), rs.getString("id_area"), rs.getString("nombre_sede"));
                /* Se agrega el empleado a la lista. */
                listaPV.add(tempPV);
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el puesto de vigilancia");
            return null;
        } finally {
            conexion.cerrarConexion();
        }
        //return listaSedes.toArray(new Sede[listaSedes.size()]);
        return listaPV;
    }

        public static PuestoVigilancia consultarPuestoVigilancia(String id_area) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando un Sede!");
            return null;
        }
        String query = "SELECT nombre_sede,id_area FROM area where descripcion = '"+id_area+ "'";
        System.out.println("\n\tQuery: " + query + "\n");
        System.out.println(query);
        PuestoVigilancia tempPV = null;
        try {
            
            rs = s.executeQuery(query);
            rs.next();
             tempPV = new PuestoVigilancia(null, "", rs.getString("id_area"), rs.getString("nombre_sede"));
           
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el puesto de vigilancia");
            return null;
        } finally {
            conexion.cerrarConexion();
        }
        //return listaSedes.toArray(new Sede[listaSedes.size()]);
        return tempPV;
    }

        public JSONArray consultarPuestoVigTabla(String query) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando Puesto de Vigilancia!");
            return null;
        }
        System.out.println(query);
        try {
            rs = s.executeQuery(query);

            conexion.session.setHoldability(rs.HOLD_CURSORS_OVER_COMMIT);

            JSONArray puestoVigs = new JSONArray();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject puestoVig = new JSONObject();
                    puestoVig.put("id_puestoVig", rs.getString(1));
                    puestoVig.put("nombrePuesto", rs.getString(2));
                    puestoVig.put("id_area", rs.getString(3));
                    puestoVig.put("sede", rs.getString(4));
                    puestoVig.put("coordx", rs.getString(5));
                    puestoVig.put("coordy", rs.getString(6));
                    puestoVig.put("estado_puesto", rs.getString(7));
                    puestoVig.put("tam", rs.getString(8));
                    puestoVigs.put(i, puestoVig);
                    i++;
                }
            } catch (Exception e) {
            }
            return puestoVigs;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error Consultado el  puestos");
            return null;
        }
    }

    public static boolean puestoVigilanciaExiste(String puesto, String id_area, String nombreSede) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo conexion Revisar Puesto! " + se.getMessage());
            return false;
        }

        String query = "SELECT * FROM puesto_vigilancia "
                + "WHERE puesto = '" + puesto + "' AND id_area = '" + id_area + "' AND nombre_sede = '" + nombreSede + "';";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al consultar existencia de un Puesto de Vig");
            return false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
        }
    }


    public static boolean actualizarPuestoVigilancia(PuestoVigilancia p, Espacio espacio) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error actualizando el puesto de vigilancia!");
            return false;
        }

        String query = "UPDATE puesto_vigilancia set ";
        if (!p.getPuesto().equals("")) {
            query += "puesto = '" + p.getPuesto()  +"'";
        }
        if (!p.getArea().equals("")) {
            query += ",id_area = '" + p.getArea() + "' ";
        }
        if (!p.getNombreSede().equals("")) {
            query += ",nombre_sede = '" + p.getNombreSede() + "' ";
        }
        query += " where id_puesto_vigilancia = " + p.getPuestoVigilancia() + ";";

        query += "UPDATE espacio set ";
        if (!p.getPuesto().equals("")) {
            query += "nombre_espacio = '" + p.getPuesto()  +"'";
        }
        if (!p.getArea().equals("")) {
            query += ",id_area = '" + p.getArea() + "' ";
        }
        if (!p.getNombreSede().equals("")) {
            query += ",nombre_sede = '" + p.getNombreSede() + "' ";
        }
        if (!p.getPuesto().equals("")) {
            query += ",descripcion = '" + p.getPuesto() + "' ";
        }
        if (!espacio.getCoordx().equals("")) {
            query += ",coordx = '" + espacio.getCoordx() + "' ";
        }
        if (!espacio.getCoordy().equals("")) {
            query += ",coordy = '" + espacio.getCoordy() + "' ";
        }
        query += " where nombre_espacio = '" + espacio.getNombreEspacio() + "';";
        System.out.println("QUERY DE MODIFICACION " + query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            System.out.println("Error al actualizar puesto de vigilancia! "+se.getMessage() );
            return false;
        }
    }

         public static boolean desactivarPuesto(String idPuesto) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error desactivando Puesto!");
            return false;
        }
        String query = "UPDATE puesto_vigilancia set estado_puesto = 'off' where id_puesto_vigilancia = '" + idPuesto + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al desactivar puesto");
            return false;
        }
    }

  public static boolean activarPuesto(String idPuesto) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error desactivando Puesto!");
            return false;
        }
        String query = "UPDATE puesto_vigilancia set estado_puesto = 'on' where id_puesto_vigilancia = '" + idPuesto + "';";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al desactivar puesto");
            return false;
        }
    }





}
